home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cug236.zip / BAWK.H < prev    next >
Text File  |  1980-01-02  |  8KB  |  296 lines

  1. /*
  2.     HEADER:        CUG000.00;
  3.     TITLE:        BAWK Include File;
  4.     DATE:        05/17/1987;
  5.     VERSION:    1.1;
  6.     FILENAME:    BAWK.H;
  7.     SEE-ALSO:    BAWK.C;
  8.     AUTHORS:    W. C. Colley III, B. Brodt;
  9. */
  10.  
  11. /*
  12.  * Shortened names of variables Fieldsep and Recordsep to keep them unique
  13.  * in their first six characters so that compilers with limited external
  14.  * name widths like Eco-C (CP/M version) don't choke.  Fixed minor glitch
  15.  * that causes some compilers to choke on function str_compile().  Added a few
  16.  * portability notes for some odd compilers.  Dealt with side effects of
  17.  * tolower() implemented as a macro.  Leaned on the host compiler's library
  18.  * for is....() functions.  Stripped BDS C hooks and some ugly hacks that
  19.  * they required.  Removed the dependency on sizeof(int) == sizeof(char *).
  20.  * 16 MAY 1987.     William C. Colley, III.
  21.  */
  22.  
  23. /*
  24.  * Portability Note:  8-bit systems often don't have the header files ctype.h
  25.  * and string.h.  If your compiler is one of these animals, uncomment the
  26.  * following #defines as required.
  27.  */
  28.  
  29. /*
  30. #define NO_CTYPE_H
  31. #define NO_STRING_H
  32. */
  33.  
  34. /*
  35.  * Portability Note:  Back in K & R days, standard library function malloc()
  36.  * was called alloc().    Some compilers (e.g. Eco-C under CP/M) haven't made
  37.  * the name change.  If yours is one of these compilers, uncomment the
  38.  * following #define:
  39.  */
  40.  
  41. /*
  42. #define malloc(p)    alloc(p)
  43. */
  44.  
  45. /*
  46.  * Portability Note:  The AZTEC C compilers handle the binary/text file
  47.  * dichotomy differently from most other compilers.  Uncomment the following
  48.  * pair of #defines if you are running AZTEC C:
  49.  */
  50.  
  51. /*
  52. #define getc(f)        agetc(f)
  53. #define putc(c,f)    aputc(c,f)
  54. */
  55.  
  56. #ifdef    NO_CTYPE_H
  57. int isalnum(), isalpha(), isdigit(), tolower();
  58. #else
  59. #include <ctype.h>
  60. #endif
  61.  
  62. #ifdef    NO_STRING_H
  63. int strncmp(), strlen();
  64. #else
  65. #include <string.h>
  66. #endif
  67.  
  68. /*
  69.  * Bawk constants and variable declarations.
  70.  */
  71. #ifdef BDS_C
  72. #define EXTERN /* */
  73. #else
  74.  
  75. #ifdef MAIN
  76. #define EXTERN /* */
  77. #else
  78. #define EXTERN extern
  79. #endif
  80.  
  81. #endif
  82.  
  83.  
  84. #define DEBUG 1 /* remove this line to compile without debug statements */
  85. #ifdef DEBUG
  86. EXTERN char Debug;        /* debug print flag */
  87. #endif
  88.  
  89. /*
  90.  * Table and buffer sizes
  91.  */
  92. #define MAXLINELEN    128    /* longest input line */
  93. #define MAXWORDS    (MAXLINELEN/2)    /* max # of words in a line */
  94. #define MAXWORKBUFLEN    4096    /* longest action or regular expression */
  95. #define MAXVARTABSZ    50    /* max # of symbols */
  96. #define MAXVARLEN    10    /* symbol name length */
  97. #define MAXSTACKSZ    40    /* max value stack length (for expressions) */
  98.  
  99.  
  100. /**********************************************************
  101.  * Current Input File variables                  *
  102.  **********************************************************/
  103. /*
  104.  * Current Input File pointer:
  105.  */
  106. EXTERN FILE *Fileptr;
  107. EXTERN char *Filename;        /* current input file name */
  108. EXTERN int Linecount;        /* current input line number */
  109. EXTERN int Recordcount;        /* record count */
  110. /*
  111.  * Working buffers.
  112.  */
  113. EXTERN char Linebuf[ MAXLINELEN ];    /* current input line buffer */
  114. EXTERN char *Fields[ MAXWORDS ];    /* pointers to the words in Linebuf */
  115. EXTERN int Fieldcount;            /* and the # of words */
  116. EXTERN char Workbuf[ MAXWORKBUFLEN ];    /* work area for C action and */
  117.                     /* regular expression parsers */
  118.  
  119. /**********************************************************
  120.  * Regular Expression Parser variables              *
  121.  **********************************************************/
  122. /*
  123.  * Tokens:
  124.  */
  125. #define CHAR    1
  126. #define BOL    2
  127. #define EOL    3
  128. #define ANY    4
  129. #define CLASS    5
  130. #define NCLASS    6
  131. #define STAR    7
  132. #define PLUS    8
  133. #define MINUS    9
  134. #define ALPHA    10
  135. #define DIGIT    11
  136. #define NALPHA    12
  137. #define PUNCT    13
  138. #define RANGE    14
  139. #define ENDPAT    15
  140.  
  141.  
  142. /**********************************************************
  143.  * C Actions Interpreter variables              *
  144.  **********************************************************/
  145. /*
  146.  * Tokens:
  147.  */
  148. #define T_STRING    'S'    /* primaries: */
  149. #define T_DOLLAR    '$'
  150. #define T_REGEXP    'r'
  151. #define T_CONSTANT    'C'
  152. #define T_VARIABLE    'V'
  153. #define T_FUNCTION    'F'
  154. #define T_SEMICOLON    ';'    /* punctuation */
  155. #define T_EOF        'Z'
  156. #define T_LBRACE    '{'
  157. #define T_RBRACE    '}'
  158. #define T_LPAREN    '('
  159. #define T_RPAREN    ')'
  160. #define T_LBRACKET    '['
  161. #define T_RBRACKET    ']'
  162. #define T_COMMA        ','
  163. #define T_ASSIGN    '='    /* operators: */
  164. #define T_MUL        '*'
  165. #define T_DIV        '/'
  166. #define T_MOD        '%'
  167. #define T_ADD        '+'
  168. #define T_SUB        '-'
  169. #define T_SHL        'L'
  170. #define T_SHR        'R'
  171. #define T_LT        '<'
  172. #define T_LE        'l'
  173. #define T_GT        '>'
  174. #define T_GE        'g'
  175. #define T_EQ        'q'
  176. #define T_NE        'n'
  177. #define T_NOT        '~'
  178. #define T_AND        '&'
  179. #define T_XOR        '^'
  180. #define T_IOR        '|'
  181. #define T_LNOT        '!'
  182. #define T_LAND        'a'
  183. #define T_LIOR        'o'
  184. #define T_INCR        'p'
  185. #define T_DECR        'm'
  186. #define T_IF        'i'    /* keywords: */
  187. #define T_ELSE        'e'
  188. #define T_WHILE        'w'
  189. #define T_BREAK        'b'
  190. #define T_CHAR        'c'
  191. #define T_INT        't'
  192. #define T_BEGIN        'B'
  193. #define T_END        'E'
  194. #define T_NF        'f'
  195. #define T_NR        '#'
  196. #define T_FS        ' '
  197. #define T_RS        '\n'
  198. #define T_FILENAME    'z'
  199.  
  200. #define PATTERN 'P'    /* indicates C statement is within a pattern */
  201. #define ACTION    'A'    /* indicates C statement is within an action */
  202.  
  203. /*
  204.  * Symbol table
  205.  */
  206. typedef struct variable {
  207.     char    vname[ MAXVARLEN ];
  208.     char    vclass;
  209.     char    vsize;
  210.     int    vlen;
  211.     char    *vptr;
  212. } VARIABLE;
  213.  
  214. EXTERN VARIABLE Vartab[ MAXVARTABSZ ], *Nextvar;
  215.  
  216. /*
  217.  * Value stack
  218.  */
  219. typedef union datum {
  220.     int    ival;
  221.     char    *dptr;
  222.     char    **ptrptr;
  223. } DATUM;
  224.  
  225. typedef struct item {
  226.     char    class;
  227.     char    lvalue;
  228.     char    size;
  229.     DATUM    value;
  230. } ITEM;
  231.  
  232. EXTERN ITEM Stackbtm[ MAXSTACKSZ ], *Stackptr, *Stacktop;
  233.  
  234. /*
  235.  * Symbol Table values
  236.  */
  237. #define ACTUAL        0
  238. #define LVALUE        1
  239. #define BYTE        1
  240. #define WORD        sizeof(DATUM)
  241.  
  242. /*
  243.  * Miscellaneous
  244.  */
  245. EXTERN char *Actptr;    /* pointer into Workbuf during compilation */
  246. EXTERN char Token;    /* current input token */
  247. EXTERN DATUM Value;    /* and its value */
  248. EXTERN char Saw_break;    /* set when break stmt seen */
  249. EXTERN char Where;    /* indicates whether C stmt is a PATTERN or ACTION */
  250. EXTERN char Fldsep[3];    /* field seperator */
  251. EXTERN char Rcrdsep[3]; /* record seperator */
  252. EXTERN char *Beginact;    /* BEGINning of input actions */
  253. EXTERN char *Endact;    /* END of input actions */
  254.  
  255. /**********************************************************
  256.  * Rules structure                      *
  257.  **********************************************************/
  258. typedef struct rule {
  259.     struct {
  260.         char *start;    /* C statements that match pattern start */
  261.         char *stop;    /* C statements that match pattern end */
  262.         char startseen; /* set if both a start and stop pattern */
  263.                 /* given and if an input line matched the */
  264.                 /* start pattern */
  265.     } pattern;
  266.     char *action;        /* contains quasi-C statements of actions */
  267.     struct rule *nextrule;    /* pointer to next rule */
  268. } RULE;
  269.  
  270. EXTERN RULE *Rules,        /* rule structures linked list head */
  271.     *Rulep;            /* working pointer */
  272.  
  273.  
  274. /**********************************************************
  275.  * Miscellaneous                      *
  276.  **********************************************************/
  277. /*
  278.  * Error exit values (returned to command shell)
  279.  */
  280. #define USAGE_ERROR    1    /* error in invokation */
  281. #define FILE_ERROR    2    /* file not found errors */
  282. #define RE_ERROR    3    /* bad regular expression */
  283. #define ACT_ERROR    4    /* bad C action stmt */
  284. #define MEM_ERROR    5    /* out of memory errors */
  285. /*
  286.  * Functions that are referenced across module boundaries:
  287.  */
  288. char *getmem(), *malloc();
  289. int act_compile(), alpha(), alphanum(), atoi(), dopattern(), getcharacter();
  290. int getline(), getoken(), instr(), isfunction(), iskeyword(), match();
  291. int parse(), pat_compile(), pop(), popint(), re_compile(), ungetcharacter();
  292. VARIABLE *findvar(), *addvar(), *decl();
  293. void assignment(), declist(), doaction(), endfile(), error(), expression();
  294. void fillmem(), free(), function(), movemem(), push(), pushint();
  295. void syntaxerror(), unparse();
  296.